/*******************************************************
 * @作者: zhaodh
 * @日期: 2011-12-19
 * @描述: 文件处理相关方法
 * @声明: copyrights reserved by personal 2007-2011
 *******************************************************/
package com.android.pagemarket.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.os.Environment;

public class FileUtil
{
    /**
     * 获取新的文件，如果已存在则删除，创建新文件包括目录
     * @param file 文件全路径
     * @return 失败返回null
     */
    public static File newFile(String file)
    {
        if(file == null || file.trim().length() == 0) return null;
        File f = new File(file);       
        try
        {
            // 删除存在的
            if (f.exists())
            {
                f.delete();
            }
            // 创建父目录
            File parent = f.getParentFile();
            if(parent != null && !parent.exists())
            {
                parent.mkdirs();
            }
            // 创建文件
            if( f.createNewFile())
            {
                return f;
            }
        }catch(IOException e)
        {
            e.printStackTrace();
        }
        return null;
    }
    
    /**
     * 创建目录
     * @param dir 目录全路径
     * @return 失败返回null
     */
    public static File newDir(String dir)
    {
        if(dir == null || dir.trim().length() == 0) return null;
        File f = new File(dir);
        if(f.isDirectory() && !f.exists())
        {
             return f.mkdirs() ? f : null;
        }else
        {
            return f;
        }
    }

    /** 删除文件或者目录*/
    public static boolean delFDir(File fd)
    {
        if(fd == null)  return false;
        if(!fd.exists()) return true;
        if(!fd.isDirectory())
        {
            return fd.delete();
        }else
        {
            File[] files = fd.listFiles();
            if(files != null)
            {
                // 目录下有文件
                for (int i = 0; i < files.length; i++)
                {
                    if (files[i].isDirectory())
                    {
                        delFDir(files[i]);
                    }
                    else
                    {
                        files[i].delete();
                    }
                }
            }
            return fd.delete();
        }
    }

    public static String getExternDir(String dir)
    {
        String path = Environment.getExternalStorageDirectory().getAbsolutePath();
        path += dir;
        return path;
    }
    
    public static boolean saveFile(String filename, InputStream ios)
    {
        if(ios == null) return false;
        File file = newFile(filename);
        if(file == null) return false;
        FileOutputStream fos = null;
        try
        {
            fos = new FileOutputStream(file);
            byte[] buffer = new byte[1024];
            int len = 0;
            while( (len = ios.read(buffer)) != -1)
            {
                fos.write(buffer, 0, len);
            }
            return true;
        } catch (FileNotFoundException e)
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        }finally
        {
            if(fos != null)
            {
                try
                {
                    fos.flush();
                    fos.close();
                    fos = null;
                } catch (IOException e)
                {
                    e.printStackTrace();
                }                
            }
        }
        return false;
    }
}
